class MensajesController < ApplicationController
  before_action :set_mensaje, only: [:edit, :update, :destroy]

  # GET /mensajes
  # GET /mensajes.json
  def index
    @mensajes = Mensaje.all
  end

  # GET /mensajes/1
  # GET /mensajes/1.json
  def show
    @etiqueta = Etiqueta.find_by(nombre: params[:nombre])
    @mensajes = @etiqueta.mensajes
  end

  # GET /mensajes/new
  def new
    if params[:mensaje]
      @mensaje= Mensaje.new(:contenido => params[:mensaje])
    else
      @mensaje = Mensaje.new
    end
  end

  # GET /mensajes/1/edit
  def edit
  end

  # POST /mensajes
  # POST /mensajes.json
  def create
    @mensaje = Mensaje.new(mensaje_params)

    respond_to do |format|
      if @mensaje.save
        current_user.mensajes << @mensaje

        #Analizamos el mensaje creado y guardamos los tags en un array
        arrayTags = @mensaje.contenido.scan(/#\S+/)
        #Por cada tag, le quito el numeral, compruebo si existe (si no existe lo creo), y lo asocio al mensaje
        arrayTags.each do |t|
          tag = t.gsub("#",""); #quita el numeral
          if (tagExistente = Etiqueta.find_by(nombre: tag))
            @mensaje.etiquetas << tagExistente
          else
            @mensaje.etiquetas.create(nombre: tag);
          end
        end

        format.html { redirect_to :back, notice: 'Mensaje was successfully created.' }
        format.json { render :show, status: :created, location: @mensaje }
      else
        format.html { render :new }
        format.json { render json: @mensaje.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /mensajes/1
  # PATCH/PUT /mensajes/1.json
  def update
    respond_to do |format|
      if @mensaje.update(mensaje_params)
        format.html { redirect_to @mensaje, notice: 'Mensaje was successfully updated.' }
        format.json { render :show, status: :ok, location: @mensaje }
      else
        format.html { render :edit }
        format.json { render json: @mensaje.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /mensajes/1
  # DELETE /mensajes/1.json
  def destroy
    @mensaje.destroy
    respond_to do |format|
      format.html { redirect_to mensajes_url, notice: 'Mensaje was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_mensaje
      unless (current_user == Mensaje.find(params[:id]).usuario)
        redirect_to :noautorizado
      else
        @mensaje = Mensaje.find(params[:id])
      end
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def mensaje_params
      params.require(:mensaje).permit(:contenido)
    end
end
